/**
 * Vue Router 路由配置文件
 * 定义应用程序的所有路由规则和页面导航结构
 */

// Vue Router 核心功能导入
import { createRouter, createWebHistory } from 'vue-router'
// 布局容器组件
import LayoutContainer from '@/components/Layout/LayoutContainer.vue'
// 登录页面组件
import Login from '@/views/Login.vue'

/**
 * 创建路由实例
 * 使用 HTML5 History 模式进行路由管理
 */
const router = createRouter({
  // 使用 HTML5 History API，URL 不会包含 # 号
  history: createWebHistory(import.meta.env.BASE_URL),

  /**
   * 路由配置数组
   * 定义了应用程序的完整路由结构
   */
  routes: [
    {
      // 登录页面路由
      path: '/login',
      name: 'Login',
      component: Login,
      meta: {
        title: '登录',
        requiresAuth: false // 登录页面不需要认证
      }
    },
    {
      // 根路径重定向到首页
      path: '/',
      redirect: '/index'
    },
    {
      // 主要的应用布局路由
      path: '/',
      name: 'LayoutContainer',
      component: LayoutContainer, // 使用布局容器组件
      children: [

        {
          // 首页页面 - 系统首页（保留作为默认首页）
          path: 'index',
          name: 'index',
          component: () => import('@/views/Home.vue'),
          meta: { title: '首页' }
        },

        // 移除静态管理页面路由，这些将通过动态路由来处理
      ]
    },

    {
      // 清理缓存页面 - 无需登录验证
      path: '/clear-cache',
      name: 'ClearCache',
      component: () => import('@/views/ClearCache.vue'),
      meta: {
        title: '清理缓存',
        requiresAuth: false // 不需要登录验证
      }
    },
    {
      // 404 页面 - 捕获所有未匹配的路由
      path: '/:pathMatch(.*)*',
      name: 'NotFound',
      component: () => import('@/views/NotFound.vue'),
      meta: {
        title: '页面不存在',
        requiresAuth: false
      }
    }
  ],
})

/**
 * 全局前置路由守卫
 * 用于检查用户登录状态和权限，支持动态路由（使用Mock数据）
 */
router.beforeEach(async (to, from, next) => {
  // 设置页面标题
  if (to.meta.title) {
    document.title = `${to.meta.title} `
  }

  // 检查登录状态：基于 employee_info 是否存在
  const employeeInfo = localStorage.getItem('employeeInfo')
  const isLoggedIn = employeeInfo && employeeInfo !== 'null' && employeeInfo !== 'undefined'

  // 防止重复路由：对于特定的统计页面，如果已经在当前路由且路由名称相同，则阻止导航
  if (isLoggedIn && from.name && to.name) {
    const uniqueByNameRoutes = ['customers', 'teamCustomers', 'visitors', 'PersonalRanks', 'DeptRanks']
    if (uniqueByNameRoutes.includes(to.name) && from.name === to.name) {
      // 如果是相同的路由名称，直接返回，不进行导航
      next(false)
      return
    }
  }

  // 特殊处理：404页面的访问控制
  if (to.name === 'NotFound') {
    if (!isLoggedIn) {
      // 未登录状态下访问不存在的路由，跳转到登录页
      next('/login')
      return
    }
    // 已登录状态下，不要直接显示404，让后续的动态路由逻辑处理
    // 如果确实不是动态路由，后续逻辑会处理
  }

  // 检查是否需要登录认证
  const requiresAuth = to.meta.requiresAuth !== false // 默认需要认证

  if (requiresAuth && !isLoggedIn) {
    // 需要登录但未登录，跳转到登录页
    next('/login')
    return
  }

  if (to.path === '/login' && isLoggedIn) {
    // 已登录用户访问登录页，跳转到首页
    next('/index')
    return
  }

  // 如果已登录，确保动态路由已加载
  if (isLoggedIn) {
    // 动态导入用户状态管理
    const { useUserStore } = await import('@/stores/user')
    const userStore = useUserStore()

    // 如果用户数据为空，尝试恢复
    if (!userStore.employeeInfo || Object.keys(userStore.employeeInfo).length === 0) {
      userStore.restoreUserInfo()
    }

    // 使用Mock菜单数据设置动态路由
    const menuList = userStore.menuList
    if (menuList && Array.isArray(menuList) && menuList.length > 0) {
      // 动态导入路由工具函数
      const { forceSetupDynamicRoutes, getAddedRoutes } = await import('@/utils/dynamicRoutes')

      // 检查动态路由是否已添加
      const addedRoutes = getAddedRoutes()
      const hasRoutes = addedRoutes.length > 0

      // 检查当前路径是否是动态路由
      const isDynamicRoute = menuList.some(menu => {
        if (menu.children && menu.children.length > 0) {
          return menu.children.some(child => {
            const childPath = child.menu_url.startsWith('/') ? child.menu_url.slice(1) : child.menu_url
            return to.path === `/${childPath}` || to.path === `/${childPath}/` || to.path === childPath
          })
        }
        if (menu.menu_url) {
          const menuPath = menu.menu_url.startsWith('/') ? menu.menu_url.slice(1) : menu.menu_url
          return to.path === `/${menuPath}` || to.path === `/${menuPath}/` || to.path === menuPath
        }
        return false
      })

      // 如果路由还没有添加，先添加它们
      if (!hasRoutes) {
        forceSetupDynamicRoutes(menuList)
        // 如果当前访问的是动态路由，需要重新导航
        if (isDynamicRoute) {
          next({ path: to.path, replace: true })
          return
        }
      }

      // 如果是动态路由但被识别为 NotFound，说明路由匹配有问题
      if (isDynamicRoute && (to.name === 'NotFound' || !to.matched.length)) {
        forceSetupDynamicRoutes(menuList)
        // 使用 nextTick 确保路由已添加
        await new Promise(resolve => setTimeout(resolve, 0))
        // 重新导航到目标路径
        next({ path: to.path, replace: true })
        return
      }
    }
  }

  // 最终处理：如果到这里还是NotFound，说明确实不存在
  if (to.name === 'NotFound' && isLoggedIn) {
    // 已登录用户访问真正不存在的路由，显示404页面
    next()
    return
  }

  // 正常访问
  next()
})


router.afterEach((to) => {
	if (to.meta.title) {
		window.document.title = `${to.meta.title} - 管理系统 `
	}
})

// 导出路由实例供应用使用
export default router
